<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    // 2.有以下题目：
    function Foo() {
      //函数名首字母大写为构造函数
      getName = function () {
        //因为此方法不是用var定义的，前面也没this，实际上它是一个全局的方法，它的对象是window
        console.log(1);
      };
      // console.log(this);
      return this; //this指向window
    }
    Foo.getName = function () {
      //往构造函数上添加一个方法
      console.log(2);
    };
    Foo.prototype.getName = function () {
      //通过原型向构造函数添加共享的方法
      console.log(3);
    };
    var getName = function () {
      //定义了一个全局变量
      console.log(4);
    };
    function getName() {
      //定义了一个全局的方法
      console.log(5);
    }
    // 不使用浏览器调试的方法，计算以下函数会输出什么？
    Foo.getName(); //2
    getName(); //4  当全局方法与变量同名时，方法会提升到变量之前 5->1->4
    Foo().getName(); //1  Foo()的优先级高于getName(),Foo()返回的结果this指向的是window
    getName(); //1 因为上一行代码已经改变了this的指向所有这里的getName()也是全局的方法
    new Foo.getName(); //2 .优先级高于new
    new Foo().getName(); //3  new Foo()实例化对象 优先级高于new Foo
    new new Foo().getName(); //3 与上一行代码一致
  </script>
</html>
